#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include <string>
#include <vector>

#ifndef _TEXTO_H_
#define _TEXTO_H_

using namespace std;

/*!
 *  \class Texto
 *  \author Shin-NiL
 *  \date 12/02/2010 Criação
 *  \version 0.1
 *  \brief Classe de Texto
 *
 *  Classe que possibilita escrever texto diretamente na tela
 *  dentro dos limites estabelecidos em um retângulo
 */


class Texto
{
    private:
        /// Retângulo onde será escrito o texto
        SDL_Rect mRect;
        /// Ponteiro para fonte
        TTF_Font* mpFonte;
        /// Largura da fonte
        Uint16 mLarguraFonte;
        /// Altura da fonte
        Uint16 mAlturaFonte;
        /// Tamanho da fonte
        Uint16 mTamanhoFonte;
        /// String que guarda o texto
        string mTexto;
        /// Vetor dinâmico que guarda as palavras separadamente
        vector<string> mPalavras;
        /// Ponteiro para a superfície de destino
        SDL_Surface* mpDestino;
        /// \brief Apenas faz o blit do texto na tela
        /// \param texto o texo a ser blitado
        /// \param x coordenada x de destino
        /// \param y coordenada y de destino
        /// \param r componente vermelho da cor do texto
        /// \param g componente verde da cor do texto
        /// \param b componente azul da cor do texto
        void blitaTexto(string texto, Uint16 x, Uint16 y, Uint8 r, Uint8 g, Uint8 b);
        /// Carrega o conteúdo da string para o vetor de palavras
        void carregaString();
	/// Flag para indicar se a SDL_ttf já foi inicializada
	static Uint8 initTTF;

    public:
        /// Construtor padrão
        Texto();
        /// Destrutor padrão
        ~Texto();
        /// \brief Inicializa as variáveis
        /// \param larguraRect largura do retângulo onde será escrito o texto
        /// \param alturaRect algura do retângulo onde será escrito o texto
        /// \param fonte arquivo que contém a fonte do texto
        /// \param tamanhoFonte tamanho da fonte usada para escrever o texto
        SDL_bool inicializa(Uint16 larguraRect, string fonte,
                        Uint16 tamanhoFonte);
        /// \brief Exibe o texto na tela
        /// \param x coordenada x de destino
        /// \param y coordenada y de destino
        /// \param destino superfície onde será escrito o texto
        /// \param r componente vermelho da cor do texto
        /// \param g componente verde da cor do texto
        /// \param b componente azul da cor do texto
        void exibe(Uint16 x, Uint16 y, SDL_Surface* destino, Uint8 r, Uint8 g, Uint8 b);
        /// \brief escreve o texto por parâmetro
        /// \param texto deve conter o texto a ser escrito
        void escreve(string texto);
 };

#endif


